package proyectoFC_2_3_3.koyicabuto;

import java.util.ArrayList;
import java.util.List;

import proyectoFC_2_3_3.koyicabuto.BaseDeDatos.GruposDataBase;
import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.DialogInterface.OnClickListener;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.Data;
import android.view.View;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.Toast;


public class TabPersonasGrupoActivity extends ListActivity{
	
	private Long idGrupoSeleccionado = null;
	private ListView listaPersonasGrupo = null;
	private Cursor mCursor = null;
	
	private Long idPersonaEliminar = null;
	
	//Base de Datos
	private SQLiteDatabase gruposDataBase;
	private GruposDataBase gruposDataBaseHelper;

	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.tabpersonasgrupo);
        
        //Obtenemos las variables que vienen de GruposListViewActivity
        Bundle extras = getIntent().getExtras();
		if(extras != null){
			idGrupoSeleccionado = extras.getLong("idGrupoSeleccionado");
		}
		
		String cadenaId = cargaPersonalGrupo(idGrupoSeleccionado);
		
		if(cadenaId != null){
		    // Setup the list
			mCursor = getContentResolver().query(
					  Data.CONTENT_URI, new String[] { Data._ID, Data.DISPLAY_NAME, Phone.NUMBER, Data.CONTACT_ID},
					  Data.MIMETYPE + "='" + Phone.CONTENT_ITEM_TYPE + "' AND " + Phone.NUMBER + " IS NOT NULL " + 
					  "AND " + Data.CONTACT_ID + " in " + cadenaId , null, Data.DISPLAY_NAME + " ASC ");
			startManagingCursor(mCursor);
		}
		
		ListAdapter adapter = new CustomCursorAdapter(this, mCursor, this);
		listaPersonasGrupo = this.getListView();
		listaPersonasGrupo.setAdapter(adapter);
    }
	
	public void eliminaPersonalGrupo(Long idPersona, Long idGrupo){
		boolean error = false;
		gruposDataBaseHelper = new GruposDataBase(this, "GruposDataBase", null, 1);
		gruposDataBase = gruposDataBaseHelper.getWritableDatabase();		
		
		try{
			if(gruposDataBase != null){
				gruposDataBase.execSQL("DELETE FROM PERSONAL_GRUPOS " +
									   "WHERE PG_PER_ID = " + idPersona + " AND PG_GR_ID = " + idGrupo );
				
				gruposDataBase.close();
			}
		}catch (Exception e) {
			error = true;
			System.out.println("Excepcion en eliminaPersonalGrupo: " +e.getMessage());
		}
		if(!error){
			updateData();
			Toast.makeText(this, "Eliminado correctamente.", Toast.LENGTH_SHORT).show();
		}
	}
	
	public void eliminaPersonal(Long idContacto){
		String nombrePersona = null;
		
		Cursor cursorPersona = getContentResolver().query(
				  Data.CONTENT_URI, new String[] { Data._ID, Data.DISPLAY_NAME, Phone.NUMBER, Data.CONTACT_ID},
				  Data.MIMETYPE + "='" + Phone.CONTENT_ITEM_TYPE + "' AND " + Phone.NUMBER + " IS NOT NULL " + 
				  "AND " + Data.CONTACT_ID + " = " + idContacto , null, Data.DISPLAY_NAME + " ASC ");
		
		idPersonaEliminar = idContacto;
		
		if(cursorPersona.moveToFirst()){
			do{
				nombrePersona = cursorPersona.getString(1);
			}while(cursorPersona.moveToNext());
		}
		
		crearDialogoAlerta(null, "¿Está seguro de eliminar a " + nombrePersona + " del grupo seleccionado?");		
	}
	
	public void cargaContactos(View view){
		Intent i = new Intent(this, ListaContactosActivity.class);
		i.putExtra("idGrupoSeleccionado", idGrupoSeleccionado);
		startActivityForResult(i,1);
	}
	
	private String cargaPersonalGrupo(Long idGrupo){
		List<Long> listaId = new ArrayList<Long>();
		String cadena = null;
		String[] parametros = new String[]{idGrupo.toString()};
		String selectGrupo = "SELECT PG_PER_ID FROM PERSONAL_GRUPOS WHERE PG_GR_ID = ? ";
		
		GruposDataBase  gruposDataBaseHelper = new GruposDataBase(this, "GruposDataBase", null, 1);
		SQLiteDatabase gruposDataBase = gruposDataBaseHelper.getReadableDatabase();	
		
		try{
			if(gruposDataBase != null){
				Cursor cursor = gruposDataBase.rawQuery(selectGrupo, parametros);
	
				if(cursor.moveToFirst()){
					do{
						listaId.add(cursor.getLong(0));
					}while(cursor.moveToNext());
				}
				gruposDataBase.close();
			}			
		
		}catch (Exception e) {
			System.out.println("Excepcion en cargaPersonalGrupo: " +e.getMessage());
		}
		
		if(listaId != null && !listaId.isEmpty()){
			cadena = "(";
			for(Long iteracion:listaId){
				cadena = cadena + iteracion + ",";
			}
			cadena = cadena.substring(0, cadena.length() - 1);
			cadena = cadena + ")";
		}
		
		return cadena;
	}
	
	/**
	 * Metodo con el que mostramos un diálogo de alerta en el caso de que se guarde correctamente un nuevo grupo.
	 */
	private void crearDialogoAlerta(String titulo, String mensaje)
	{
	    AlertDialog alertDialog = new AlertDialog.Builder(this).create();
	    
	    if(titulo != null){
	    	alertDialog.setTitle(titulo);
	    }
	    alertDialog.setMessage(mensaje);
	    alertDialog.setButton("Cancelar", new OnClickListener() {
	        public void onClick(DialogInterface dialog, int which) {
	        }
	    });
	    alertDialog.setButton2("Eliminar", new OnClickListener() {
	        public void onClick(DialogInterface dialog, int which) {
	        	eliminaPersonalGrupo(idPersonaEliminar, idGrupoSeleccionado);
	        }
	    });
	    alertDialog.show();	 
	}
	
	@Override
	public void onActivityResult(int requestCode, int resultCode, Intent data){     
	  super.onActivityResult(requestCode, resultCode, data); 
	  switch(requestCode) { 
	     case (1) : { 
		      if (resultCode == ListaContactosActivity.RESULT_OK) { 
		    	  idGrupoSeleccionado = data.getLongExtra("idGrupoSeleccionado", Long.valueOf(-1));
		      }
            break; 
	     } 
	   } 
	  updateData();
	}
	
	/**
	 * Metodo que recarga la lista, para que cuando volvamos de la pantalla de añadir contactos, se carguen los contactos nuevos.
	 */
	private void updateData() {
		String cadenaId = cargaPersonalGrupo(idGrupoSeleccionado);
		
		if(cadenaId != null){
		    // Setup the list
			mCursor = getContentResolver().query(
					  Data.CONTENT_URI, new String[] { Data._ID, Data.DISPLAY_NAME, Phone.NUMBER, Data.CONTACT_ID},
					  Data.MIMETYPE + "='" + Phone.CONTENT_ITEM_TYPE + "' AND " + Phone.NUMBER + " IS NOT NULL " + 
					  "AND " + Data.CONTACT_ID + " in " + cadenaId , null, Data.DISPLAY_NAME + " ASC ");
			startManagingCursor(mCursor);
		}
		
		CustomCursorAdapter customAdapter = new CustomCursorAdapter(this, mCursor, this);
		customAdapter.notifyDataSetChanged();
		ListAdapter adapter = customAdapter;
		listaPersonasGrupo = this.getListView();
		listaPersonasGrupo.setAdapter(adapter);
	}
	
	public void onClickBotonVolver(View view){
		Intent i = new Intent(this, ListaGruposActivity.class);
		startActivity(i);
	}
	
	////////////////////////////////
	////  GETTER'S y SETTER'S  ////
	//////////////////////////////
	

	public Long getIdPersonaEliminar() {
		return idPersonaEliminar;
	}

	public void setIdPersonaEliminar(Long idPersonaEliminar) {
		this.idPersonaEliminar = idPersonaEliminar;
	}

}
